<?php
use think\facade\Cache;
use think\facade\Config;
use think\facade\Db;
use think\facade\Request;
use EasyWeChat\MiniApp\Application;
use think\facade\Filesystem;
use think\facade\Session;
use think\Image;
use think\Model;
use zjkal\TimeHelper;//调用时间库
// use EasyWeChat\OfficialAccount\Application;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Contract\HttpClientInterface;
// 快递鸟预计送达时间接口

// 快递鸟查询订单
function getOrderTracesByJson($order,$phone){
$requestData = json_encode([
	    'EBusinessID' => xn_cfg('delivery.customer'),
	    'RequestType' => '1002', // API类型：查单
	    'DataSign'    => 'md5',  // 固定值
	    'DataType'    => '2',    // 固定值
	    // 'ShipperCode' => 'YZPY',//快递编码
	    'LogisticCode' => $order,//快递单
		'CustomerName'=>$phone,//收货人
		'Sort'=>'1',
]); 
  // 组装系统级参数
	$datas = array(
        'EBusinessID' =>xn_cfg('delivery.customer'),
        'RequestType' => '1002', //免费即时查询接口指令1002/在途监控即时查询接口指令8001/地图版即时查询接口指令8003
        'RequestData' => urlencode($requestData) ,
        'DataType' => '2',
    );
	// --------------------------------------------
    $datas['DataSign'] = encrypt($requestData, xn_cfg('delivery.key'));
  //以form表单形式提交post请求，post请求体中包含了应用级参数和系统级参数
	$result=sendPost('https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx', $datas);	
	
	//根据公司业务处理返回的信息......
	
	return $result;
}
/**
 *  post提交数据 
 * @param  string $url 请求Url
 * @param  array $datas 提交的数据 
 * @return url响应返回的html
 */
function sendPost($url, $datas) {
    $postdata = http_build_query($datas);
    $options = array(
      'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $postdata,
        'timeout' => 15 * 60 // 超时时间（单位:s）
      )
    );
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    return $result;
}

/**
 * 电商Sign签名生成
 * @param data 内容   
 * @param ApiKey ApiKey
 * @return DataSign签名
 */
function encrypt($data, $ApiKey) {
    return urlencode(base64_encode(md5($data.$ApiKey)));
}
// 增加微信小程序支付配置
function payconfig(){
	$config = [
	    'wechat' => [
	        'default' => [
	            // 「必填」商户号，服务商模式下为服务商商户号
	            // 可在 https://pay.weixin.qq.com/ 账户中心->商户信息 查看
	            'mch_id' => '1711572322',
	            // 「选填」v2商户私钥
	            'mch_secret_key_v2' => '',
	            // 「必填」v3 商户秘钥
	            // 即 API v3 密钥(32字节，形如md5值)，可在 账户中心->API安全 中设置
	            'mch_secret_key' => 'j6R247YXq5PYPNjby4wjYKttr5yYfNiQ',
	            // 「必填」商户私钥 字符串或路径
	            // 即 API证书 PRIVATE KEY，可在 账户中心->API安全->申请API证书 里获得
	            // 文件名形如：apiclient_key.pem
	            'mch_secret_cert' => app()->getRootPath().'public'.DIRECTORY_SEPARATOR.'paycert'.DIRECTORY_SEPARATOR.'apiclient_key.pem',
	            // 「必填」商户公钥证书路径
	            // 即 API证书 CERTIFICATE，可在 账户中心->API安全->申请API证书 里获得
	            // 文件名形如：apiclient_cert.pem
	            'mch_public_cert_path' => app()->getRootPath().'public'.DIRECTORY_SEPARATOR.'paycert'.DIRECTORY_SEPARATOR.'apiclient_cert.pem',
	            // 「必填」微信回调url
	            // 不能有参数，如?号，空格等，否则会无法正确回调
	            'notify_url' => 'https://ainiu.kbyun.fun/api/pays/notify_refund',
	            // 「选填」公众号 的 app_id
	            // 可在 mp.weixin.qq.com 设置与开发->基本配置->开发者ID(AppID) 查看
	            'mp_app_id' => '',
	            // 「选填」小程序 的 app_id
	            'mini_app_id' => 'wx52739cdcda99ec46',
	            // 「选填」app 的 app_id
	            'app_id' => '',
	            // 「选填」服务商模式下，子公众号 的 app_id
	            'sub_mp_app_id' => '',
	            // 「选填」服务商模式下，子 app 的 app_id
	            'sub_app_id' => '',
	            // 「选填」服务商模式下，子小程序 的 app_id
	            'sub_mini_app_id' => '',
	            // 「选填」服务商模式下，子商户id
	            'sub_mch_id' => '',
	            // 「选填」（适用于 2024-11 及之前开通微信支付的老商户）微信支付平台证书序列号及证书路径，强烈建议 php-fpm 模式下配置此参数
	            // 「必填」微信支付公钥ID及证书路径，key 填写形如 PUB_KEY_ID_0000000000000024101100397200000006 的公钥id，见 https://pay.weixin.qq.com/doc/v3/merchant/4013053249
	            'wechat_public_cert_path' => [
	                // '45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
	                'PUB_KEY_ID_0117115723222025032400198200000674' =>  app()->getRootPath().'public'.DIRECTORY_SEPARATOR.'paycert'.DIRECTORY_SEPARATOR.'publickey.pem',
	            ],
	            // 「选填」默认为正常模式。可选为： MODE_NORMAL, MODE_SERVICE
	            'mode' => Pay::MODE_NORMAL,
	        ]
	    ],
	    'logger' => [  
	        'enable' => true,
	        'file' => './logs/pay.log',
	        'level' => 'info', // 建议生产环境等级调整为 info，开发环境为 debug
	        'type' => 'single', // optional, 可选 daily.
	        'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
	    ],
	    'http' => [ // optional
	        'timeout' => 5.0,
	        'connect_timeout' => 5.0,
	        // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
	    ],
	];
	return $config;
}
// function url(){
// 	echo app()->getRootPath().'public'.DIRECTORY_SEPARATOR.'paycert'.DIRECTORY_SEPARATOR.'apiclient_key.pem'; 
// }
// 调用公共微信配置
function weconfig(){
	$appid=xn_cfg('wechat.appid');
	$appsecret=xn_cfg('wechat.appsecret');
	$config = [
	    'app_id' => $appid,
	    'secret' => $appsecret,
	    'http' => [
	        'throw'  => true, // 状态码非 200、300 时是否抛出异常，默认为开启
	        'timeout' => 5.0,
	        // 'base_uri' => 'https://api.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用，根据不同的模块配置不同的 uri
	        'retry' => true, // 使用默认重试配置
	    ],
	];
	
	$app = new Application($config);
	return $app;
}
//获取url参数
function get_params($key = "")
{
    return Request::instance()->param($key);
}
// 设置订单号
function setorderid(){
    return date('YmdHis',time()).substr(microtime(),2,6).sprintf('%03d',rand(0,999));
}
//设置缓存
function set_cache($key, $value, $date = 86400)
{
    Cache::set($key, $value, $date);
}

//读取缓存
function get_cache($key)
{
   return Cache::get($key);
}

//清空缓存
function clear_cache($key)
{
    Cache::clear($key);
}
//图片增加地址
function imgurl($imgurl){
   $url='https://'.$_SERVER['SERVER_NAME'].$imgurl;
   $res= str_replace('\\',"/",$url);
   return $res;
}
// 判断是否为https
function isHttpsUrlByRegex($url) {
    return preg_match('/^https:\/\//i', $url) === 1;
}
// 公共上传方法
function uploadfile($file){
   	$folder_name='files';
   	//允许的格式
   	$exts = ['png','jpg','jpeg','gif','bmp','doc','docx','csv','xls','xlsx','xlsm','pdf'];
   
   	//文件后缀名
   	$ext = $file->getOriginalExtension();
   	//配置信息
   	$config = xn_cfg('upload');
   	//存储类型
   	$storage = $config['storage'];
   	if( !in_array( strtolower($ext), $exts ) ) {
   	   return json(['code'=>404,'msg'=>'格式不符']);
   	}
   	//上传到本地服务器
   	$savename = Filesystem::disk('public')->putFile($folder_name,$file);
   	if (!$savename) {
   	    return json(['code'=>404,'msg'=>'上传失败']);  
   	}
   	$file_path = config('filesystem.disks.public.url') . '/'. str_replace("\\","/",$savename);  
	return $file_path;
}
